//
//  HomeViewController.swift
//  sinaweibowj
//
//  Created by Macintosh on 15/12/12.
//  Copyright © 2015年 mactoinsh. All rights reserved.
//

import UIKit

import AFNetworking
import SVProgressHUD

private let HomeCellID = "HomeCellID"

class HomeViewController: BaseTableViewController {
    
    //var statuses:[Status]?  可选，使用时需要判断
    private lazy var statuses = [Status]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !userLogin {
            visitorLoginView?.setupInfo("登录后，别人评论你的微博，发给你的消息，都会在这里收到通知",imageName:nil)
            return
        }
        //设置tableView
        regieterTableView()
       // loadData()
    }
    
    override func viewDidAppear(animated: Bool) {
        
        loadData()
    }
    
    private func regieterTableView(){
        
        //注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellID)
        
        //修改tableView固定高度
        //tableView.rowHeight = 200
        //给首页cell自动计算行高 需要设置两个属性
        //1.设置预估行高，尽量接近真实高度 能够提高效率
        //tableView能够计算行高条件之一就是contentView必须添加约束
        tableView.estimatedRowHeight = 300
        //2.设置自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //3.设置分割线样式
        tableView.separatorStyle = .None
        //4.下拉刷新
        refreshControl = UIRefreshControl()
        
        refreshControl?.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        tableView.tableFooterView = indicatorView
        
    }
    
    @objc private func loadData(){
        //ViewModel加载网络数据
        //since_id和max_id 互斥条件，有且只能有一个
        var since_id :Int64 = 0
        var max_id :Int64 = 0
        
        //根据小菊花是否正在转动 判断是否加载更多
        if indicatorView.isAnimating(){
        //上拉加载更多数据
            max_id = statuses.last?.id ?? 0
        }else {
            since_id = statuses.first?.id ?? 0
        }
        
        
        StatusListViewModel.loadHomePageData(since_id , max_id: max_id) { (statuses) -> () in
            //加载完数据关闭动画
            self.refreshControl?.endRefreshing()
            
            guard let list = statuses else {
                return
            }
            
            if since_id > 0 {
            //下拉刷新数据添加
            self.statuses = list + self.statuses
            }else if max_id > 0 {
            //上拉数据刷新添加数据
            self.statuses = self.statuses + list
                //数据加载完成后关闭动画，不然只能多加载一页数据
                self.indicatorView.stopAnimating()
            }else {
            //首次加载
            self.statuses = list
            }
            //刷新表视图
            self.tableView.reloadData()
        }
    
    }
    
    
    //懒加载小菊花
    private lazy var indicatorView : UIActivityIndicatorView = {
    let vc = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        return vc
    }()
}
    //MARK:tableView的数据源协议方法
    extension HomeViewController {
        
        
        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
        }
        
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return statuses.count
        }
        
        
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            //一定可以获取一个cell 对象  iOS6.0推出  xib/sb 不需要手动注册cell
            let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellID, forIndexPath: indexPath) as! StatusCell
            
            // cell.textLabel?.text = statuses[indexPath.row].user?.name
            cell.status = statuses[indexPath.row]
           //在小菊花没有转动 并且滑动到最后一行 加载数据
            if !self.indicatorView.isAnimating() && indexPath.row == statuses.count - 1{
            //加载数据之前转动菊花
                self.indicatorView.startAnimating()
                loadData()
            }
            return cell
        }
}


